package br.ufrn.acqua

class UsuarioController {

	def index() {
		render(view:"login")
	}

	def logon(){

		def usuario = Usuario.findByLoginAndSenha(params.login,params.senha)

		if(usuario){
			if(usuario.foto)
				usuario.foto = Documento.get(usuario.foto.id)
				
			session.usuarioLogado = usuario;

			redirect(controller: "index", action: "index")
		}else{
			usuario = new Usuario()
			usuario.errors.rejectValue('senha', 'br.ufrn.acqua.Usuario.loginSenha.incorreto')
			render(view:"login",model:[usuario:usuario])
		}
	}

	def logout(){
		session.usuarioLogado = null;

		redirect(controller: "index", action: "index")
	}

	def registrar(){
		render(view:"registro")
	}

	def cadastrar(){

		def usuario = new Usuario(params)

		if (usuario.save()) {
			session.usuarioLogado = usuario;

			redirect(controller: "index", action: "index")
		}
		else {
			render(view:"registro",model:[usuario:usuario])
		}
	}

	def perfil(){
		def usuario = Usuario.get(session.usuarioLogado.id)
		usuario.foto = Documento.get(usuario?.foto?.id)

		render(view:"perfil",model:[usuario:usuario])
	}

	def atualizarPerfil(){
		def arquivo = request.getFile('arquivo')
		def usuario = Usuario.get(session.usuarioLogado.id)

		usuario.nome = params.nome
		usuario.email = params.email

		usuario.validate()

		if(params.senha){
			if(params.senha != usuario.senha){
				usuario.errors.rejectValue('senha', 'br.ufrn.acqua.Usuario.senha.incorreta')
			}else{
				if(params.novaSenha &&
				!params.novaSenha.equals(params?.novaSenhaConfirm)){
					usuario.errors.rejectValue('novaSenha', 'br.ufrn.acqua.Usuario.novaSenha.incorreta')
				}else{
					usuario.senha = params.novaSenha
				}
			}
		}

		if (usuario.hasErrors()) {
			render(view:"perfil",model:[usuario:usuario])
		}else{

			if(arquivo){
				def documentInstance = new Documento()

				documentInstance.nome = arquivo.originalFilename
				documentInstance.dados = arquivo.getBytes()
				documentInstance.tipo = arquivo.contentType

				usuario.foto = documentInstance
			}

			Usuario.withTransaction { status ->

				if(usuario.foto){
					usuario.foto.save()
				}
				usuario.save()
			}


			session.usuarioLogado = usuario

			flash.message="Perfil atualizado com Sucesso!"

			redirect (controller:'index',action:'index')
		}
	}

	def removerFoto(){
		def usuario = Usuario.get(session.usuarioLogado.id)

		if(usuario.foto){
			Usuario.withTransaction { status ->
				usuario.foto = Documento.get(usuario?.foto?.id)
				usuario.foto.delete();
				usuario.foto = null
				usuario.save()
			}
			session.usuarioLogado = usuario

			flash.message="Foto removida com sucesso!"
		}

		render(view:"perfil",model:[usuario:usuario])
	}
}
